ComponentClass
Otázka od: david@nj.hcv.cz
11. 8. 2004 11:47
Zdravim...
With TButton(FindComponent(jmeno)) do - tohle je normalni vec ale musi to
byt button ,chtel bych aby to bylo univerzalni a ja bych jen pres nejaky
parametr udal co je to za typ ,ale kdyz dam promenou
napr.Typ:TComponentClass....pak to zavolam jako Treba > With
(FindComponent(jmeno) as Typ) do - tak to nejde....please help!!!
****************************
David Go+AVk-ula, HCV group a.s.
Van+AQ0-urova 40,Nov+AP0- Ji+AQ0A7Q-n
www.nj.hcv.cz/maddave/
www.hcv.cz
Odpovedá: Ing. Jiri Sokol
11. 8. 2004 12:40
> Od: david@nj.hcv.cz
> Datum: 11.08.2004 12:48:40
> With TButton(FindComponent(jmeno)) do - tohle je normalni vec ale musi to
byt button ,chtel bych aby to bylo univerzalni a ja bych jen pres nejaky
parametr udal co je to za typ ,ale kdyz dam promenou
napr.Typ:TComponentClass....pak to zavolam jako Treba > With
(FindComponent(jmeno) as Typ) do - tak to nejde....please help!!!
Ahoj!
Mno, snad dobre chapu. Mas nejaky kus kodu, ktery se hodi pro vice trid nez jen
TButton. Pak ale tyhle tridy musi mit neco spolecneho, ne? Ze by nejakeho
predka? Cili hledal bych spolecneho predka, od ktereho jsou pozadovane
tridy odvozeny a je to!
Neco jako:
with TWinControl(FindComponent(jmeno)) do
Ahoj
Jirka
--------------------------------------------------
Ing. Jiri Sokol; jiri.sokol@seznam.cz; 972 231 187
D6Prof+SP3; WinXPProf+SP1; FB 1.5.0
programator amater
Odpovedá: david@nj.hcv.cz
11. 8. 2004 13:36
Ahoj!
Mno, snad dobre chapu. Mas nejaky kus kodu, ktery se hodi pro vice trid nez jen
TButton. Pak ale tyhle tridy musi mit neco spolecneho, ne? Ze by nejakeho
predka? Cili hledal bych spolecneho predka, od ktereho jsou pozadovane
tridy odvozeny a je to!
Neco jako:
with TWinControl(FindComponent(jmeno)) do
No to je sice pekne tak by to bylo super kdyby to slo,ale bohuzel pokud chci
nastavit treba barvu tak
nazev='Label1'
With TWinControl(FindComponent(nazev)) do
begin
Color:=clRed;
end;
Nezmeni se nic.....
a nebo
With TLabel(FindComponent(nazev)) do
begin
Color:=clRed;
end;
tak se to zmeni.....tak nevim.....
Odpovedá: Marian Nykel
11. 8. 2004 13:46
Ale TLabel neni (aspon v Delphi) potomkem TWinControl, takze zkus pouzit
"obecnejsiho" predka, treba TControl...
mANY
david@nj.hcv.cz wrote:
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> Nezmeni se nic.....
> a nebo
>
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> tak se to zmeni.....tak nevim...
Odpovedá: Milan Tomes
11. 8. 2004 14:15
IMHO to co chces je resitelne pouze pres RTTI.
S pozdravem
Milan Tomes
P.S.: Za domaci ukol by ses mel podivat na to, jak se pisou komponenty a co
to vlastne presne chces... Sam pak prijdes na to, ze "normalnimi" postupy je
to nemozne...
> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of david@nj.hcv.cz
> Sent: Wednesday, August 11, 2004 2:36 PM
>
> No to je sice pekne tak by to bylo super kdyby to slo,ale bohuzel
> pokud chci nastavit treba barvu tak
>
> nazev='Label1'
>
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> Nezmeni se nic.....
> a nebo
>
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
>
> tak se to zmeni.....tak nevim.....
Odpovedá: Svoboda Jiri
11. 8. 2004 14:13
Snad takhle ..
procedure SetColorProperty(Ctrl: TControl; FColor: TColor);
var i: integer;
begin
if Assigned(GetPropinfo(ctrl,'Color')) then
SetOrdProp(ctrl,'Color',FColor);
end;
Delphi 5
Odpovedá: Daniel Frantik
11. 8. 2004 15:22
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of david@nj.hcv.cz
> nazev='Label1'
>
> With TWinControl(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
Tady volas Color od formulare
> With TLabel(FindComponent(nazev)) do
> begin
> Color:=clRed;
> end;
Tady uz je to spravne
Reseni
1) nepouzivej tu silenou konstrukce with - nevis co volas
2) pouzij RTTI (a nebo ve specialnim pripade 3)
3) pokud existuje nejaky spolecny predek (v tvem pripade TControl)
pouzij nastaveni na spolecnem predkovi
type
THackControl=class(TControl) //pouze publikuje property
public
property color;
end;
...
THackControl(FindControl(Nazev)).Color:=clRed;
//popr. o neco mene prehledneji bez THackControl:
TEdit(FindControl(Nazev)).Color:=clRed;
//misto TEdit muze byt cokoliv co je potomek TControl a ma public
property Color a nema ji prekrytou vlastni property pozdeji ... (napr.
TLabel, TPanel apod
Danik